home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 355 / source / ifsdemo / gemprocs.mod < prev    next >
Text File  |  1990-02-02  |  6KB  |  227 lines

  1. IMPLEMENTATION MODULE GEMProcs;
  2.  
  3. FROM SYSTEM IMPORT ADDRESS;
  4.  
  5. FROM AESApplications IMPORT ApplInit,
  6.                             ApplExit;
  7.  
  8. FROM AESForms IMPORT FormAlert,
  9.                      FormCenter,
  10.                      FormDial,
  11.                      FormDo;
  12.  
  13. FROM AESGraphics IMPORT GrafMouse,
  14.                         GrafHandle;
  15.  
  16. FROM AESObjects IMPORT ObjcDraw;
  17.  
  18. FROM AESResource IMPORT RsrcGAddr,
  19.                         RsrcFree,
  20.                         RsrcLoad;
  21.  
  22. FROM AESWindows IMPORT WindUpdate;
  23.  
  24. FROM GEMConstants IMPORT BEGUPDATE,
  25.                          ENDUPDATE,
  26.                          ARROW,
  27.                          BUSYBEE,
  28.                          MOFF,
  29.                          MON,
  30.                          FMDSTART,
  31.                          FMDGROW,
  32.                          FMDSHRINK,
  33.                          FMDFINISH,
  34.                          NORMAL;
  35.  
  36. FROM GEMTypes IMPORT GRECT,
  37.                      OBJECT;
  38.  
  39. FROM VDIControl IMPORT WorkIn,
  40.                        WorkOut,
  41.                        Handle,
  42.                        VClsVwk,
  43.                        VOpnVwk;
  44.  
  45. FROM VDIQuery IMPORT VqExtnd;
  46.  
  47. FROM XBIOSScreen IMPORT getRez;
  48.  
  49. TYPE Tree = POINTER TO ARRAY [1..200] OF OBJECT;
  50.  
  51. VAR dummy : INTEGER;
  52.  
  53. PROCEDURE SetScreenAttr();
  54.  
  55. BEGIN
  56.    VqExtnd(Handle,0,WorkOut);
  57.    GEMState.xmax := WorkOut[0];
  58.    GEMState.ymax := WorkOut[1];
  59.    GEMState.rez := getRez();
  60.    IF GEMState.rez < 2 THEN
  61.       GEMState.iscolor := TRUE;
  62.    ELSE
  63.       GEMState.iscolor := FALSE;
  64.    END;
  65.    GEMState.mhidden := FALSE;
  66. END SetScreenAttr;
  67.  
  68. PROCEDURE GEMInit(rscname : ADDRESS) : BOOLEAN;
  69.  
  70. BEGIN
  71.    GEMState.apid := ApplInit();
  72.    IF GEMState.apid < 0 THEN
  73.       dummy := FormAlert(1,'[1][ ApplInit | Error ??? ][ Abort ]');
  74.       GEMState.level := 0;
  75.    ELSE
  76.       GEMState.handle := GrafHandle(GEMState.wchar,GEMState.hchar,
  77.                                     GEMState.wbox,GEMState.hbox);
  78.       Handle := GEMState.handle;
  79.       VOpnVwk(WorkIn,Handle,WorkOut);
  80.       IF Handle = 0 THEN
  81.          dummy := FormAlert(1,'[1][ VOpnVwk | Error ??? ][ Abort ]');
  82.          GEMState.level := 1;
  83.       ELSIF rscname # NIL THEN
  84.          GEMState.hasrsc := TRUE;
  85.          dummy := WindUpdate(BEGUPDATE);
  86.          dummy := GrafMouse(BUSYBEE,NIL);
  87.          SetScreenAttr;
  88.          IF RsrcLoad(rscname) = 0 THEN
  89.             dummy := GrafMouse(ARROW,NIL);
  90.             dummy := FormAlert(1,'[1][ form.rsc | not found ][ Abort ]');
  91.             dummy := WindUpdate(ENDUPDATE);
  92.             GEMState.level := 2;
  93.          ELSE
  94.             dummy := GrafMouse(ARROW,NIL);
  95.             dummy := WindUpdate(ENDUPDATE);
  96.             GEMState.level := 3;
  97.          END;
  98.       ELSE
  99.          GEMState.hasrsc := FALSE;
  100.          GEMState.level := 3;
  101.       END;
  102.    END;
  103.    IF GEMState.level = 3 THEN
  104.       RETURN TRUE;
  105.    ELSE
  106.       RETURN FALSE;
  107.    END;
  108. END GEMInit;
  109.  
  110. PROCEDURE GEMTerm();
  111.  
  112. BEGIN
  113.    IF GEMState.level > 0 THEN
  114.       IF GEMState.level > 1 THEN
  115.          IF GEMState.level > 2 THEN
  116.             IF GEMState.hasrsc THEN
  117.                dummy := RsrcFree();
  118.             END;
  119.          END;
  120.          VClsVwk(Handle);
  121.       END;
  122.       dummy := ApplExit();
  123.    END;
  124. END GEMTerm;
  125.  
  126. PROCEDURE HideMouse();
  127.  
  128. BEGIN
  129.    IF NOT GEMState.mhidden THEN
  130.       dummy := GrafMouse(MOFF,NIL);
  131.       GEMState.mhidden := TRUE;
  132.    END;
  133. END HideMouse;
  134.  
  135. PROCEDURE ShowMouse();
  136.  
  137. BEGIN
  138.    IF GEMState.mhidden THEN
  139.       dummy := GrafMouse(MON,NIL);
  140.       GEMState.mhidden := FALSE;
  141.    END;
  142. END ShowMouse;
  143.  
  144. PROCEDURE Min(a,b : INTEGER) : INTEGER;
  145.  
  146. BEGIN
  147.    IF a > b THEN
  148.       RETURN b;
  149.    ELSE
  150.       RETURN a;
  151.    END;
  152. END Min;
  153.  
  154. PROCEDURE Max(a,b : INTEGER) : INTEGER;
  155.  
  156. BEGIN
  157.    IF a > b THEN
  158.       RETURN a;
  159.    ELSE
  160.       RETURN b;
  161.    END;
  162. END Max;
  163.  
  164. PROCEDURE RectIntersect(rect1     : GRECT;
  165.                         VAR rect2 : GRECT) : BOOLEAN;
  166.  
  167. VAR tx,ty,tw,th : INTEGER;
  168.  
  169. BEGIN
  170.    tw := Min(rect2.x + rect2.w,rect1.x + rect1.w);
  171.    th := Min(rect2.y + rect2.h,rect1.y + rect1.h);
  172.    tx := Max(rect2.x,rect1.x);
  173.    ty := Max(rect2.y,rect1.y);
  174.    rect2.x := tx;
  175.    rect2.y := ty;
  176.    rect2.w := tw - tx;
  177.    rect2.h := th - ty;
  178.    IF ((tw > tx) AND (th > ty)) THEN
  179.       RETURN TRUE;
  180.    ELSE
  181.       RETURN FALSE;
  182.    END;
  183. END RectIntersect;
  184.  
  185. PROCEDURE DoDialog(boxindex : INTEGER);
  186.  
  187. VAR xbox,ybox,wbox,hbox         : INTEGER;
  188.     smallx,smally,smallw,smallh : INTEGER;
  189.     exitobject                  : INTEGER;
  190.     boxaddr                     : Tree;
  191.  
  192. BEGIN
  193.    dummy := RsrcGAddr(0,boxindex,boxaddr);
  194.    dummy := FormCenter(boxaddr,xbox,ybox,wbox,hbox);
  195.    smallx := xbox + (wbox DIV 2);
  196.    smally := ybox + (hbox DIV 2);
  197.    smallw := 0;
  198.    smallh := 0;
  199.    dummy := FormDial(FMDSTART,smallx,smally,smallw,smallh,
  200.                               xbox,ybox,wbox,hbox);
  201.    dummy := FormDial(FMDGROW,smallx,smally,smallw,smallh,
  202.                              xbox,ybox,wbox,hbox);
  203.    dummy := ObjcDraw(boxaddr,0,10,xbox,ybox,wbox,hbox);
  204.    exitobject := FormDo(boxaddr,0);
  205.    dummy := FormDial(FMDSHRINK,smallx,smally,smallw,smallh,
  206.                                xbox,ybox,wbox,hbox);
  207.    dummy := FormDial(FMDFINISH,smallx,smally,smallw,smallh,
  208.                                xbox,ybox,wbox,hbox);
  209.    boxaddr^[exitobject].state := NORMAL;
  210. END DoDialog;
  211.  
  212. PROCEDURE AddrToInts(addr      : ADDRESS;
  213.                      VAR i1,i2 : INTEGER);
  214.  
  215. TYPE TWOINTS = ARRAY [0..1] OF INTEGER;
  216.  
  217. VAR temp : TWOINTS;
  218.  
  219. BEGIN
  220.    temp := VAL(TWOINTS,addr);
  221.    i1 := temp[0];
  222.    i2 := temp[1];
  223. END AddrToInts;
  224.  
  225. BEGIN
  226. END GEMProcs.
  227.